home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / TEST / MINTBUG4.M < prev    next >
Encoding:
Text File  |  1992-02-19  |  4.1 KB  |  149 lines

  1. MODULE MiNTBug4;
  2. (*$C-,N+,R-,L-*)
  3.  
  4. (*
  5.  * this program shows, that after starting two sub-process a memory
  6.  * block of 50248 bytes remains allocated in memory. This block lays
  7.  * behind the allocated memory of the called processes, thus dividing
  8.  * the largest memory block.
  9.  *
  10.  * NOTE: link with no additional startup code!
  11.  *)
  12.  
  13. FROM SYSTEM IMPORT ASSEMBLER;
  14.  
  15. BEGIN
  16.   ASSEMBLER
  17.         move.l  4(a7),a5        ; load ptr to our base page
  18.         
  19.         ; reduce our own TPA to 80000 bytes
  20.         ; Mshrink (base page, 80000)
  21.         MOVE.L  #80000,-(A7)
  22.         MOVE.L  A5,-(A7)
  23.         CLR.W   -(A7)
  24.         MOVE    #$4A,-(A7)
  25.         TRAP    #1
  26.         ADDA.W  #12,A7
  27.  
  28.         ; create a new base page
  29.         CLR.L   -(A7)           ; env
  30.         PEA     null(PC)        ; com
  31.         CLR.L   -(A7)           ; path
  32.         MOVE.W  #5,-(A7)        ; mode
  33.         MOVE    #$4B,-(A7)
  34.         TRAP    #1
  35.         ADDA.W  #16,A7
  36.         
  37.         ; reduce TPA to size of base page only:
  38.         ; Mshrink (base page, 256)
  39.         MOVE.L  #256,-(A7)
  40.         MOVE.L  D0,-(A7)
  41.         CLR.W   -(A7)
  42.         MOVE    #$4A,-(A7)
  43.         TRAP    #1
  44.         MOVE.L  4(A7),A0        ; A0: base page addr
  45.         ADDA.W  #12,A7
  46.         
  47.         ; do base page settings
  48.         lea     (a0),a2
  49.         lea     low_sp(pc),a1
  50.         move.l  a1,(a2)+        ; p_lowtpa:= low_sp;
  51.         lea     top_sp(pc),a1
  52.         move.l  a1,(a2)+        ; p_hitpa := top_sp;
  53.         lea     proc1(pc),a1
  54.         move.l  a1,(a2)+        ; p_tbase := proc1;
  55.         clr.l   (a2)+           ; p_tlen  := 0L;
  56.         clr.l   (a2)+           ; p_dbase := 0L;
  57.         clr.l   (a2)+           ; p_dlen  := 0L;
  58.         clr.l   (a2)+           ; p_bbase := 0L;
  59.         clr.l   (a2)+           ; p_blen  := 0L;
  60.         
  61.         ; call process (proc1)
  62.         CLR.L   -(A7)           ; env
  63.         MOVE.L  A0,-(A7)        ; com
  64.         CLR.L   -(A7)           ; path
  65.         MOVE.W  #4,-(A7)        ; mode
  66.         MOVE    #$4B,-(A7)
  67.         TRAP    #1
  68.         ADDA.W  #16,A7
  69.         
  70.         ; do Pterm(D0)
  71.         move    D0,-(a7)
  72.         move    #$4c,-(a7)
  73.         trap    #1
  74.  
  75.  
  76.         ; here's the sub-process' #1 code:
  77.  
  78. proc1:  ; fix MiNT bug - load a7 to hi_tpa
  79.         move.l  4(a7),a5
  80.         move.l  4(a5),a7
  81.  
  82.         ; create a new base page
  83.         CLR.L   -(A7)           ; env
  84.         PEA     null(PC)        ; com
  85.         CLR.L   -(A7)           ; path
  86.         MOVE.W  #5,-(A7)        ; mode
  87.         MOVE    #$4B,-(A7)
  88.         TRAP    #1
  89.         ADDA.W  #16,A7
  90.  
  91.         ; reduce TPA to size of base page only:
  92.         ; Mshrink (base page, 256)
  93.         MOVE.L  #256,-(A7)
  94.         MOVE.L  D0,-(A7)
  95.         CLR.W   -(A7)
  96.         MOVE    #$4A,-(A7)
  97.         TRAP    #1
  98.         MOVE.L  4(A7),A0        ; A0: base page addr
  99.         ADDA.W  #12,A7
  100.  
  101.         ; do base page settings
  102.         lea     (a0),a2
  103.         lea     low_s2(pc),a1
  104.         move.l  a1,(a2)+        ; p_lowtpa:= low_s2;
  105.         lea     top_s2(pc),a1
  106.         move.l  a1,(a2)+        ; p_hitpa := top_s2;
  107.         lea     proc2(pc),a1
  108.         move.l  a1,(a2)+        ; p_tbase := proc2;
  109.         clr.l   (a2)+           ; p_tlen  := 0L;
  110.         clr.l   (a2)+           ; p_dbase := 0L;
  111.         clr.l   (a2)+           ; p_dlen  := 0L;
  112.         clr.l   (a2)+           ; p_bbase := 0L;
  113.         clr.l   (a2)+           ; p_blen  := 0L;
  114.         
  115.         ; call process (proc2)
  116.         CLR.L   -(A7)           ; env
  117.         MOVE.L  A0,-(A7)        ; com
  118.         CLR.L   -(A7)           ; path
  119.         MOVE.W  #4,-(A7)        ; mode
  120.         MOVE    #$4B,-(A7)
  121.         TRAP    #1
  122.         ADDA.W  #16,A7
  123.         
  124.         ; do Pterm(2)
  125.         move    #2,-(a7)
  126.         move    #$4c,-(a7)
  127.         trap    #1
  128.  
  129.  
  130.         ; here's the sub-process' #2 code:
  131.  
  132. proc2:  ; do Pterm(3)
  133.         move    #3,-(a7)
  134.         move    #$4c,-(a7)
  135.         trap    #1
  136.  
  137.         ; stack area #1 (defined as TPA):
  138. low_sp: ds      200     ; 200 bytes
  139. top_sp:
  140.  
  141.         ; stack area #2 (defined as TPA):
  142. low_s2: ds      100     ; 100 bytes
  143. top_s2:
  144.  
  145. null:   DC.W    0
  146.  
  147.   END
  148. END MiNTBug4.
  149.